JSON ডেটার Integrity এবং Consistency নিশ্চিত করা মানে হল ডেটা সঠিক, নির্ভরযোগ্য, এবং পূর্বনির্ধারিত কাঠামো বা নিয়ম অনুসারে বৈধ কিনা তা যাচাই করা। Jackson লাইব্রেরি JSON serialization এবং deserialization-এ গুরুত্বপূর্ণ ভূমিকা পালন করে এবং ডেটার মান যাচাই করার বিভিন্ন উপায় সরবরাহ করে।
JSON Data-এর Integrity এবং Consistency নিশ্চিত করার উদ্দেশ্য
- ডেটা ভ্যালিডেশন: নিশ্চিত করা যে JSON ডেটার কাঠামো এবং মান সঠিক।
- ডেটা নিরাপত্তা: JSON ডেটার মাধ্যমে অনাকাঙ্ক্ষিত পরিবর্তন বা ত্রুটি প্রতিরোধ।
- Error Handling: ডেটার ত্রুটি সনাক্ত এবং যথাযথ ত্রুটি বার্তা প্রদান।
- API Integration: ভিন্ন সিস্টেম থেকে প্রাপ্ত ডেটার বৈধতা পরীক্ষা।
Jackson ব্যবহার করে JSON Data Integrity এবং Consistency নিশ্চিত করার পদ্ধতি
1. Java Bean Validation (JSR 380)
Java Bean Validation annotations (@NotNull, @Size, @Pattern, ইত্যাদি) ব্যবহার করে ডেটা ভ্যালিডেশন করা সম্ভব।
উদাহরণ:
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
public class User {
@NotNull(message = "Name cannot be null")
@Size(min = 2, max = 50, message = "Name must be between 2 and 50 characters")
private String name;
@NotNull(message = "Email cannot be null")
@Pattern(regexp = ".+@.+\\..+", message = "Invalid email format")
private String email;
// Getters and Setters
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
Validation Integration:
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;
public class DataIntegrityExample {
public static void main(String[] args) {
try {
String json = """
{
"name": "John",
"email": "invalid-email"
}
""";
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(json, User.class);
// Validator তৈরি
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
var violations = validator.validate(user);
if (!violations.isEmpty()) {
violations.forEach(violation -> System.out.println(violation.getMessage()));
} else {
System.out.println("Valid User: " + user.getName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
আউটপুট:
Invalid email format
2. Custom Deserialization দিয়ে Integrity নিশ্চিত করা
কাস্টম deserializer ব্যবহার করে JSON ডেটার integrity যাচাই করা যায়।
উদাহরণ:
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import java.io.IOException;
class Product {
private String name;
@JsonDeserialize(using = PriceDeserializer.class)
private double price;
// Getters and Setters
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public double getPrice() { return price; }
public void setPrice(double price) { this.price = price; }
}
class PriceDeserializer extends JsonDeserializer<Double> {
@Override
public Double deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
double price = p.getDoubleValue();
if (price < 0) {
throw new IOException("Price cannot be negative: " + price);
}
return price;
}
}
ব্যবহার:
public class CustomDeserializerExample {
public static void main(String[] args) {
try {
String json = """
{
"name": "Smartphone",
"price": -100.50
}
""";
ObjectMapper mapper = new ObjectMapper();
Product product = mapper.readValue(json, Product.class);
System.out.println("Product: " + product.getName() + ", Price: " + product.getPrice());
} catch (Exception e) {
System.err.println("Validation Error: " + e.getMessage());
}
}
}
আউটপুট:
Validation Error: Price cannot be negative: -100.5
3. Schema Validation
JSON Schema ব্যবহার করে ডেটার কাঠামো এবং মান যাচাই করা যায়।
Dependency (NetworkNT JSON Schema Validator):
<dependency>
<groupId>com.github.java-json-tools</groupId>
<artifactId>json-schema-validator</artifactId>
<version>2.2.14</version>
</dependency>
উদাহরণ:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.fge.jsonschema.core.report.ProcessingReport;
import com.github.fge.jsonschema.main.JsonSchema;
import com.github.fge.jsonschema.main.JsonSchemaFactory;
public class SchemaValidationExample {
public static void main(String[] args) {
try {
String schemaJson = """
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "integer",
"minimum": 18
}
},
"required": ["name", "age"]
}
""";
String jsonData = """
{
"name": "John",
"age": 17
}
""";
ObjectMapper mapper = new ObjectMapper();
JsonNode schemaNode = mapper.readTree(schemaJson);
JsonNode dataNode = mapper.readTree(jsonData);
JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
JsonSchema schema = factory.getJsonSchema(schemaNode);
ProcessingReport report = schema.validate(dataNode);
if (report.isSuccess()) {
System.out.println("JSON Data is valid.");
} else {
System.out.println("Validation Errors:");
System.out.println(report);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
আউটপুট:
Validation Errors:
error: instance failed to match at least one required condition
required property "age" is missing
4. Nested Validation
Nested JSON ডেটার consistency নিশ্চিত করতে @Valid annotations ব্যবহার করা যায়।
উদাহরণ:
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
public class Order {
@NotNull
private String orderId;
@Valid
@NotNull
private Product product;
// Getters and Setters
public String getOrderId() { return orderId; }
public void setOrderId(String orderId) { this.orderId = orderId; }
public Product getProduct() { return product; }
public void setProduct(Product product) { this.product = product; }
}
Jackson এবং Java Bean Validation ব্যবহার করে JSON Data-এর Integrity এবং Consistency নিশ্চিত করার জন্য:
- Basic Validation:
@NotNull,@Size,@Patternannotations ব্যবহার করুন। - Custom Rules: Custom deserializer দিয়ে validation করুন।
- Schema Validation: JSON Schema-এর মাধ্যমে কাঠামো যাচাই করুন।
- Nested Data: Nested objects-এর জন্য
@Validannotations প্রয়োগ করুন।
এই কৌশলগুলো ব্যবহার করে আপনি JSON ডেটার সঠিকতা এবং নির্ভরযোগ্যতা নিশ্চিত করতে পারবেন।
Read more